uniapp 子组件更新数据

您所在的位置:网站首页 uniapp list组件 uniapp 子组件更新数据

uniapp 子组件更新数据

2022-06-04 11:28| 来源: 网络整理| 查看: 265

11月份的面试越来越觉得自己学的不够踏实和深入。现在实习了有空总结下

京东前端实习一道面试题:vue中组件通信接口有哪些,除了props和$emit?

注意是接口,我说了vuex和localStorage,立马就被否决了

一、父子组件通信 1.props和$emit

props最常见的父子通信接口,但是props是单向数据流的形式:父级 prop 的更新会向下流动到子组件中,但是反过来则不行

此时需要借助vue提供的事件监听机制来完成子组件向父组件数据流动更新的功能。 在子组件使用$emit定义监听事件名称,在父组件使用v-on监听该事件,在事件中改变父组件的状态。

// father.vue 2.$parent和$children或者$refs 1) $parent

$parent用来访问父组件实例,通常父组件都是唯一确定的

// children.vue 2) $children

$children用来访问子组件实例,要知道一个组件的子组件可能是不唯一的,所以它的返回值是数组.

// father.vue 3) $refs

$children的缺点是无法确定子组件的顺序,也不是响应式的。所以如果你确切的知道要访问的子组件建议使用$refs。

$refs需要使用ref属性在子组件上设置标识,然后通过this.$refs.refName访问。

// father.vue

注意:ref属性作为组件属性时,访问的是根组件的实例;作为dom属性时,访问的是dom信息

// father.vue 3.inheritAttrs和$attrs 1)inheritAttrs

这是@2.4新增的属性和接口。inheritAttrs属性控制子组件html属性上是否显示父组件的提供的属性

// father.vue

浏览器渲染的时候,默认会把父组件写在子组件的属性一起渲染出来,它是这样的

销毁事件

发起

// children1.vue

监听

// children2.vue

销毁

// children2.vue 这里需要特别强调的一点是当一个事件在多个组件里监听时,每个组件在销毁时连同事件也要销毁,不然它会在你看不到的地方继续执行而难以被发现,当然不管是不是在多个组件监听,在组件销毁时一起销毁监听事件不失为一种良好的编程习惯 3.缺点

看了前面的例子,你会发现,通信最关键的地方其实就在上面的updateMsg函数里,而这之外的所有的东西,都只是一种繁琐的铺垫,所以缺点也是显而易见的。另外对于多个监听的地方,你还需要手动关闭,还有一个被大家诟病的就是每个事件都必需起一个独一无二的名字,这对起名废的同学来说是灾难啊

4.替代vuex

有人已经提供了一个方案使用eventBus替代vuex,这个方案为我们解决了前面提到的缺点,具体可以看这里

三、隔代组件通信 1.provide和inject(依赖注入)

依赖注入是在provide选项中提供要共享的数据,在inject选项中使用共享的数据。它也是官方首推在不使用vuex时隔代组件通信方式

1)使用 // 父级组件提供 'foo'

需要知道的是,provide也可以是个函数,返回一个对象,更多细节可以参考详细的api文档 此外,它也和props一样可以设置默认值

const 2)不明显的缺点

出于设计的考虑,依赖注入和$root一样,都是非响应式的数据模式

但是官方又说了,可以通过提供一个响应式的对象,来使注入的数据是响应式的。

// 父级组件提供 'foo'


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3